﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _8
{
    public partial class Form1 : Form
    {
        private string previousEquation = ""; // 用于保存上一个完整的等式
        private string previousResult = "";   // 用于保存上一个等式的计算结果
        // 用于记录当前输入的数字和操作符
        private string currentInput = "";
        private char currentOperator = ' ';

        public Form1()
        {
            InitializeComponent();
        }
        private void AddToCurrentInput(string value)
        {
            currentInput += value;
            txtDisplay.Text = currentInput;
        }

        private void button15_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button18_Click(object sender, EventArgs e)
        {
            currentInput = "";
            currentOperator = ' ';
            txtDisplay.Text = "";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);

            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button9_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button10_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button11_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button12_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            previousEquation = txtDisplay.Text;
            CalculateResult();

            // 保存当前的完整等式和计算结果
            
            previousResult = txtDisplay.Text.Substring(txtDisplay.Text.IndexOf('=') + 1).Trim();

            // 将完整等式显示在文本框中
            txtDisplay.Text = previousEquation+"="+previousResult;
        }
        private void CalculateResult()
        {
            try
            {
                // 使用 DataTable.Compute 方法计算公式
                DataTable dt = new DataTable();
                var result = dt.Compute(txtDisplay.Text, "");

                // 将计算结果显示在文本框中
                txtDisplay.Text = result.ToString();

                // 更新当前输入
                currentInput = result.ToString();
                previousResult = result.ToString(); // 更新上一个等式的计算结果
            }
            catch (Exception ex)
            {
                // 如果发生异常，显示错误消息
                txtDisplay.Text = "Error";
                // 可以选择在控制台中输出异常信息
                Console.WriteLine("Error: " + ex.Message);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);

            }
        }

        private void button16_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button14_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);


            }
        }

        private void button13_Click(object sender, EventArgs e)
        {
            Button button = sender as Button;
            if (button != null)
            {
                // 将文本框内容重置为上一个等式的结果
                txtDisplay.Text = previousResult;

                // 将按钮的文本添加到当前输入中
                AddToCurrentInput(button.Text);
                
            }
        }

        private void button17_Click(object sender, EventArgs e)
        {
            if (txtDisplay.Text.Length > 0&&currentInput.Length>0)
            {
                // 如果文本框内容为等式，则恢复到上一个完整的计算式
                if (txtDisplay.Text.Contains("="))
                {
                    txtDisplay.Text = previousEquation;
                }
                else
                {
                    // 删除文本框中的最后一个字符
                    currentInput = currentInput.Remove(currentInput.Length - 1, 1);
                    txtDisplay.Text = txtDisplay.Text.Remove(txtDisplay.Text.Length - 1, 1);
                    // 如果删除字符后文本框为空，则将文本框内容置为0
                    if (txtDisplay.Text == "")
                    {
                        txtDisplay.Text = "0";
                    }
                }
            }
        }
    }
}